# -*- coding: utf-8 -*-
from django.db import models
from legendofkrouzt.personagem.models import Classe, Personagem
from string import capitalize

HAND_R = 'hand_r'
HAND_L = 'hand_l'
HANDS = 'hand'
FEET = 'feet'
HEADER = 'header'
CHEST = 'chest'

ARMA_CHOICES = ( 
        (HAND_L,'Mão Esquerda'),
        (HAND_R,'Mão Direita'),
        (HANDS,'Duas Mão')
)

ARMADURA_CHOICES = ( 
        (CHEST,'Corpo'),
        (HEADER,'Cabeça'),
        (FEET,'Pés')
)


class Base(models.Model):
    
    class Meta:
        abstract = True
    
    descricao = models.CharField(max_length=200,blank=True, null=True)
    nome = models.CharField(max_length=32)
    forca = models.IntegerField(blank=True, null=True)
    inteligencia = models.IntegerField(blank=True, null=True)
    agilidade = models.IntegerField(blank=True, null=True)
    constituicao = models.IntegerField(blank=True, null=True)
    nivel = models.IntegerField(blank=True, null=True, default=0)
    hp = models.IntegerField(blank=True, null=True)
    mp = models.IntegerField(blank=True, null=True)

class Item(Base):
    preco = models.IntegerField(blank=True, null=True, default=0)
    classe = models.ManyToManyField(Classe)
    img = models.ImageField(upload_to='img/itens/')
    
    def __unicode__(self):
        return capitalize(self.nome)
    
class Arma(Base):
    preco = models.IntegerField(blank=True, null=True, default=0)
    classe = models.ManyToManyField(Classe)
    tipo_equipamento = models.CharField(
                max_length=6,
                default = HAND_L,
                choices = ARMA_CHOICES
    )
    img = models.ImageField(upload_to='img/armas/')
    
    def __unicode__(self):
        return capitalize(self.nome)
    
class Armadura(Base):
    preco = models.IntegerField(blank=True, null=True, default=0)
    classe = models.ManyToManyField(Classe)
    tipo_equipamento = models.CharField(
                max_length=6,
                default = HEADER,
                choices = ARMADURA_CHOICES
    )
    img = models.ImageField(upload_to='img/armaduras/')
    
    def __unicode__(self):
        return capitalize(self.nome)

class PersonagemItem(Base):
    personagem = models.ForeignKey(Personagem)
    item = models.ForeignKey('Item')
    preco_venda = models.IntegerField(blank=True, null=True, default=0)
    img = models.CharField(max_length=70, blank=True, null=True)
    
    def __unicode__(self):
        return capitalize(self.nome)
    
    @classmethod
    def buscaItensPersonagem(self, idPersonagem):
        """
            busca todos os itens relacionados ao id do personagem passado
        """
        itens = PersonagemItem.objects.filter(personagem=idPersonagem).order_by('-id')
        return itens

class PersonagemArma(Base):
    personagem = models.ForeignKey(Personagem)
    arma = models.ForeignKey('Arma')
    preco_venda = models.IntegerField(blank=True, null=True, default=0)
    tipo_equipamento = models.CharField(max_length=6)
    img = models.CharField(max_length=70, blank=True, null=True)
    
    def __unicode__(self):
        return capitalize(self.nome)
    
    @classmethod
    def buscaArmasPersonagem(self, idPersonagem):
        """
            busca todas as armas relacionados ao id do personagem passado
        """
        armas = PersonagemArma.objects.filter(personagem=idPersonagem).order_by('-id')
        return armas
    
class PersonagemArmadura(Base):
    personagem = models.ForeignKey(Personagem)
    armadura = models.ForeignKey('Armadura')
    preco_venda = models.IntegerField(blank=True, null=True, default=0)
    tipo_equipamento = models.CharField(max_length=6)
    img = models.CharField(max_length=70, blank=True, null=True)
    
    def __unicode__(self):
        return capitalize(self.nome)
    
    @classmethod
    def buscaArmadurasPersonagem(self, idPersonagem):
        """
            busca todas as armaduras relacionados ao id do personagem passado
        """
        armaduras = PersonagemArmadura.objects.filter(personagem=idPersonagem).order_by('-id')
        return armaduras

class Equipamento(models.Model):
    personagem = models.OneToOneField(Personagem)
    cabeca = models.ForeignKey('PersonagemArmadura', related_name="cabeca-item")
    mao_d = models.ForeignKey('PersonagemArma', related_name="mao-direita-arma")
    mao_e = models.ForeignKey('PersonagemArma', related_name="mao-esquerda-arma")
    peito = models.ForeignKey('PersonagemArmadura', related_name="peito-armadura")
    pernas = models.ForeignKey('PersonagemArmadura', related_name="pernas-armadura")
    pes = models.ForeignKey('PersonagemArmadura', related_name="pes-item")
    
    
    def __unicode__(self):
        return capitalize(self.personagem)